/**
 * 判断在横轴上是否获胜
 * 输入：1. 当前的坐标值
 *      2. 棋盘数据
 * 输出： 是否获胜true获胜 false代表失败
 */
function crosswiseSuccess(checkerboard, row, col) {
    // 先把这个坐标的值取出来
    const value = checkerboard[row][col];
    // 刚开始有个1个的，就代表我们刚下的那个棋
    let num = 1;
    // 判断这个坐标左侧有个连续的相同棋子
    for (let i = col - 1; i >= 0; i--) {
        // 判断如果和我们下的棋相同的话，就让num+1，否则就跳出循环
        if (checkerboard[row][i] === value) {
            num += 1;
        } else {
            break;
        }
    }
    // 判断这个坐标右侧有几个连续相同的棋子
    for (let i = col + 1; i < 15; i++) {
        // 判断如果和我们下的棋相同的话，就让num+1，否则就跳出循环
        if (checkerboard[row][i] === value) {
            num += 1;
        } else {
            break;
        }
    }
    // 左侧和右侧棋子数相加如果大于等于5个的话，就代表胜利了，否则代表没有胜利
    return num >= 5;
}

/**
 * 纵向是否满足条件
 * @param checkerboard
 * @param row
 * @param col
 * @returns {boolean}
 */
function lengthWaysSuccess(checkerboard, row, col) {
    // 先把这个坐标的值取出来
    const value = checkerboard[row][col];
    // 刚开始有个1个的，就代表我们刚下的那个棋
    let num = 1;
    // 判断这个坐标上边有个连续的相同棋子
    for (let i = row - 1; i >= 0; i--) {
        // 判断如果和我们下的棋相同的话，就让num+1，否则就跳出循环
        if (checkerboard[i][col] === value) {
            num += 1;
        } else {
            break;
        }
    }
    // 判断这个坐标右侧有几个连续相同的棋子
    for (let i = row + 1; i < 15; i++) {
        // 判断如果和我们下的棋相同的话，就让num+1，否则就跳出循环
        if (checkerboard[i][col] === value) {
            num += 1;
        } else {
            break;
        }
    }
    // 左侧和右侧棋子数相加如果大于等于5个的话，就代表胜利了，否则代表没有胜利
    return num >= 5;
}

/**
 * 从左向右斜线方向是否胜利
 * @param checkerboard
 * @param row
 * @param col
 * @returns {boolean}
 */
function leftBroadsideSuccess(checkerboard, row, col) {
    const value = checkerboard[row][col];
    let num = 1;
    for (let i = 1; col - i >= 0 && row - i >= 0; i++) {
        if (checkerboard[row-i][col-i] === value){
            num += 1;
        }else{
            break;
        }
    }
    for (let i = 1; col + i < 15 && row + i < 15; i++) {
        if (checkerboard[row+i][col+i] === value){
            num += 1;
        }else{
            break;
        }
    }
    return num >= 5;
}

/**
 * 从右向左斜线方向是否胜利
 * @param checkerboard
 * @param row
 * @param col
 * @returns {boolean}
 */
function rightBroadsideSuccess(checkerboard, row, col) {
    const value = checkerboard[row][col];
    let num = 1;
    for (let i = 1; col + i < 15 && row - i >= 0; i++) {
        if (checkerboard[row-i][col+i] === value){
            num += 1;
        }else{
            break;
        }
    }
    for (let i = 1; col - i >= 0 && row + i < 15; i++) {
        if (checkerboard[row+i][col-i] === value){
            num += 1;
        }else{
            break;
        }
    }
    return num >= 5;
}


export default function isSuccess(checkerboard, row, col){
    return crosswiseSuccess(checkerboard, row, col) || lengthWaysSuccess(checkerboard, row, col)
        || leftBroadsideSuccess(checkerboard, row, col) || rightBroadsideSuccess(checkerboard, row, col);
}

